using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Hadron
{
    abstract class GameState
    {
        protected GameStateManager m_gameStateManager;
        protected GameState m_gameStateNext, m_gameStatePrevious;
        protected GameContext m_gameContext;
        protected GameController m_gameController;

        public GameState()
        {
            m_gameStateManager = null;
            m_gameStateNext = null;
            m_gameContext = null;
            m_gameController = new GameController();
        }

        public abstract void OnEnter();
        public abstract void OnExit();
        public abstract void Update(GameTime p_gameTime);
        public abstract void Draw(SpriteBatch p_spriteBatch);

        public GameStateManager Manager
        {
            get { return m_gameStateManager; }
            set { m_gameStateManager = value; }
        }
        public GameState NextState
        {
            get { return m_gameStateNext; }
            set { m_gameStateNext = value; }
        }
        public GameState PreviousState
        {
            get { return m_gameStatePrevious; }
            set { m_gameStatePrevious = value; }
        }
        public GameContext Context
        {
            get { return m_gameContext; }
            set { m_gameContext = value; }
        }
        public GameController Controller
        {
            get { return m_gameController; }
        }
    }
}
